home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / dobbs / v17n03 / oopasm.exe / POPUP.ASM < prev    next >
Encoding:
Assembly Source File  |  1990-12-13  |  2.7 KB  |  139 lines

  1.     .MODEL    SMALL
  2.  
  3.     INCLUDE    equates.inc
  4.     INCLUDE    instance.inc
  5.     INCLUDE    messages.inc
  6.     INCLUDE    objects.inc
  7.  
  8. IF1
  9.     INCLUDE    macros.mac
  10.     INCLUDE    objects.mac
  11.     INCLUDE    video.mac
  12. ENDIF
  13.  
  14.     EXTRN    hideMouseCursor:NEAR
  15.  
  16.     EXTRN    Self:WORD
  17.     EXTRN    Shadow:WORD
  18.     EXTRN    Window:WORD
  19.  
  20.     .CODE
  21.  
  22. COMMENT    %
  23. ==============================================================================
  24. Calculates window coordinate data for saving/restoring a window.
  25.  
  26. Passes:    cx - Column counter
  27.     dx - Row counter
  28.     si - Video segment offset
  29.     di - Screen buffer addr
  30.  
  31. =============================================================================%
  32. getWinCoords    PROC    NEAR
  33.     getInst        al,?Shadow,Shadow    ;Get shadow flag
  34.     getInst        bh,Row1,Self        ;Get upper row
  35.     getInst        bl,Col1            ;Get left column
  36.     getInst        dh,Row2            ;Get lower row
  37.     getInst        dl,Col2            ;Get right column
  38.     null        al,gwc1            ;No shadow? - Skip
  39.     inc        dh            ;Else - incr win size
  40.     inc        dl
  41. gwc1:    lea        di,ImageBuf        ;Get addr of image buffer
  42.  
  43.     mov        ax,dx
  44.     sub        ah,bh
  45.     inc        ah            ;Number of rows
  46.  
  47.     sub        al,bl
  48.     inc        al            ;Number of columns
  49.     mov        cx,ax            ;Save rows/columns
  50.  
  51.     mov        al,160d
  52.     mul        bh
  53.     mov        si,ax
  54.     mov        al,2
  55.     mul        bl
  56.     add        si,ax            ;Offset into video seg
  57.  
  58.     xor        dx,dx
  59.     mov        dl,cl            ;Save column counter
  60.     mov        cl,ch            
  61.     xor        ch,ch            ;Row counter
  62.     ret
  63. getWinCoords    ENDP
  64.  
  65.  
  66.  
  67. COMMENT    %
  68. ==============================================================================
  69. Saves a window area for later restoration.
  70.  
  71. Passed:    cx - Column counter
  72.     dx - Row counter
  73.     si - Video segment offset
  74.     di - Screen buffer addr
  75.  
  76. =============================================================================%
  77. saveWin    PROC    NEAR
  78.     call        getWinCoords
  79.     pushData    <ds,es,ds,es>
  80.     popData        <ds,es>
  81.  
  82. swn1:    pushData    <cx,si>
  83.     mov        cx,dx
  84.     rep        movsw
  85.     popData        <si,cx>
  86.     add        si,160            ;Next row
  87.     loop        swn1
  88.     popData        <es,ds>
  89.     ret
  90. saveWin    ENDP
  91.  
  92.  
  93.  
  94. COMMENT    %
  95. ==============================================================================
  96. Restores a window area previously saved.
  97.  
  98. Passed:    cx - Column counter
  99.     dx - Row counter
  100.     si - Video segment offset
  101.     di - Screen buffer addr
  102.  
  103. =============================================================================%
  104. restoreWin    PROC    NEAR
  105.     call        getWinCoords
  106.     xchg        si,di
  107. rwn1:    pushData    <cx,di>
  108.     mov        cx,dx
  109.     rep        movsw
  110.     popData        <di,cx>
  111.     add        di,160            ;Next row
  112.     loop        rwn1
  113.     ret
  114. restoreWin    ENDP
  115.  
  116.  
  117.  
  118.     .DATA
  119.  
  120. ImageBuf    DB    2000 DUP (Nil)        ;Screen image buffer
  121.  
  122. defMsg    PopUp,\
  123.     Refresh,\
  124.     <saveWin,,>
  125.  
  126. defMsg    PopUp,\
  127.     Clear,\
  128.     <hideMouseCursor,,restoreWin>
  129.  
  130. defObj    PopUp,\
  131.     <Window>,\
  132.     <>,\
  133.     <Refresh,Clear>
  134.  
  135.  
  136.  
  137.     END
  138.  
  139.